package com.casa_apoio.estoque.controller;

import com.casa_apoio.estoque.mode.dao.ProdutoDAO;
import com.casa_apoio.estoque.mode.entity.Produto;
import com.casa_apoio.util.FacesContextUtil;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

@ManagedBean
@ViewScoped
public class MbProduto implements Serializable {

    private Produto produto;
    private List<Produto> produtos;
    private String pesquisa;
    private int count;

    private ProdutoDAO produtoDAO() {
        ProdutoDAO<Produto> produtoDAO = new ProdutoDAO<Produto>(Produto.class, FacesContextUtil.getRequestSession());
        return produtoDAO;
    }

    public String salvarProduto() {
        String descricao = produto.getDescricao();
        if (produto.getIdProduto() == null || produto.getIdProduto() < 1) {
            produtos = produtoDAO().pesquisaDescricaoCadastrada(descricao);
            if (produtos.size() > 0) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Procuto ja cadastrado com essa descrição!", ""));
                return null;
            } else {
                produtoDAO().salvar(produto);
                cancelarAlteracao();
                produtos = produtoDAO().pesquisaDescricaoCadastrada(descricao);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Procuto cadastrado com sucesso!", ""));

                return null;
            }
        } else {
            produtoDAO().atualizar(produto);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Procuto alterado com sucesso!", ""));
            produtos = produtoDAO().pesquisaDescricaoCadastrada(descricao);
            cancelarAlteracao();
            return null;
        }
        //return null;
    }

    public String alterarProduto(Produto produto) {
        this.produto = (Produto) produtoDAO().getEntity(produto.getIdProduto());
        if (this.produto == null) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Produto não encontrado, verifique o codigo!", ""));
        }
        return null;
    }

    public void pesquisaProduto() {
        if (!pesquisa.equals("")) {
            produtos = produtoDAO().pesquisaProduto(pesquisa);
            if (produtos.size() < 1) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Produto não encontrado, verifique a descrição!", ""));
            }
            pesquisa = "";
        }

    }

    public void cancelarAlteracao() {
        produto = new Produto();
    }

    public Produto getProduto() {
        if (produto == null) {
            produto = new Produto();
        }
        return produto;
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }

    public List<Produto> getProdutos() {
        if (produtos == null) {
            produtos = produtoDAO().listaProdutos();
            for (Produto p : produtos) {
                if (p.getEstoque() <= p.getCritico()) {
                    count++;
                }
            }
            System.out.println("Totallll === "+ count);
        }
        return produtos;
    }

    public void setProdutos(List<Produto> produtos) {
        this.produtos = produtos;
    }

    public String getPesquisa() {
        return pesquisa;
    }

    public void setPesquisa(String pesquisa) {
        this.pesquisa = pesquisa;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }
}
